home *** CD-ROM | disk | FTP | other *** search
- /*
- * This program is adopted from DRI test program distributed
- * with GEM on MS-DOS machines. It changed quite a bit.
- *
- */
-
-
- #include <compiler.h>
- #include <gemfast.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <vdibind.h>
- #include <aesbind.h>
- /* #include <vdibez.h> */
- /* #include "vdibez.h" */
-
- void pmsg (const char *format, ...);
- void gem_exit(int handle, int code);
-
- #define WHITE 0
- #define BLACK 1
- #define BSIZE 0x3ffe
-
- /* Coordinates for the ellipse */
- int vvar1[]={188,112, 252,112, 305,156, /* 305,211, */
- 305,211, 305,265, 252,310, /* 188,310, */
- 188,310, 124,310, 72,265, /* 72,211, */
- 72,211, 72,156, 124,112, 188,112};
-
- /* Flags for the ellipse */
- unsigned char vfar1[]={1,0,0,1,0,0,1,0,0,1,0,0,0};
-
- /* Coordinates for the funny shape */
- int vvar2[]={290,380, 377,239, 551,253, /* 464,338, */
- 464,338, 551,338, 348,310, /* 377,338, */
- 377,338, 406,366, 421,380, 290,380};
-
- /* Flags for the funny shape */
- unsigned char vfar2[]={0,0,0,1,0,0,1,0,0,0};
-
- /* Coordinates for the rectangle */
- int vvar3[]={377,70, /* 377,70, 464,70, 464,70, */
- 464,70, /* 464,70, 464,169, 464,169, */
- 464,169, /* 464,169, 377,169, 377,169, */
- 377,169, /* 377,169, 377,70,*/ 377,70};
- /* Flags for the rectangle */
- unsigned char vfar3[]={0,0,0,0,0};
-
- /* #define BEZ_DRAW v_bez_fill */
- #define BEZ_DRAW v_bez
-
- /*
- * if this program gets any argument it will be used
- * for quality settings in v_bez_qual call
- */
-
- int clip_rect[4] = {0, 0, 0, 0};
-
- int
- main(int argc, char **argv)
- {
- void *bezbuff;
- int dummy, actual, qual;
- int ii;
- int vhandle, work_in[11], work_out[57];
- int brextent[4];
- int bnpoints, bnmoves;
- double yscale, xscale;
-
- if (argc > 1) {
- argv++;
- qual = atoi (*argv);
- }
- else {
- qual = 100;
- }
-
- if(appl_init()==-1)
- return(0);
- vhandle = graf_handle(&ii,&ii,&ii,&ii);
- graf_mouse(M_OFF, (int *)0);
- v_clrwk(vhandle);
-
- for(ii = 0; ii < 10; ii++)
- work_in[ii] = 1;
- work_in[10] = 2; /* raster coordinates */
- v_opnvwk(work_in, &vhandle, work_out);
- clip_rect[2] = work_out[0];
- clip_rect[3] = work_out[1];
- vs_clip(vhandle, 1, clip_rect);
-
- /* adjust coordinates of figures to a screen */
- if (639 != clip_rect[2] || 399 != clip_rect[3]) {
- xscale = ((double) (clip_rect[2] + 1)) / 640;
- yscale = ((double) (clip_rect[3] + 1)) / 400;
- for (ii = 0; ii < sizeof(vvar1)/ sizeof(int); ) {
- vvar1[ii++] *=xscale;
- vvar1[ii++] *=yscale;
- }
- for (ii = 0; ii < sizeof(vvar2)/ sizeof(int); ) {
- vvar2[ii++] *=xscale;
- vvar2[ii++] *=yscale;
- }
- for (ii = 0; ii < sizeof(vvar3)/ sizeof(int); ) {
- vvar3[ii++] *=xscale;
- vvar3[ii++] *=yscale;
- }
- }
-
-
- #if 0
- /* It looks like that one may skip this call on ST */
-
- bezbuff = 0;
- v_set_app_buff((void *)bezbuff,0);
- #endif
-
- #if 0
- /**
- if (0 == (bezbuff = (int *) malloc(BSIZE * sizeof(short)))) {
- pmsg("No memory");
- gem_exit (vhandle, 1);
- }
- v_set_app_buff((void *)bezbuff, BSIZE);
- **/
- #endif
- v_bez_on(vhandle); /* Turn on bezier functionality */
-
- actual = v_bez_qual(vhandle, qual, &ii);
- pmsg("Bezier curves quality|requested %3d|actual %3d", qual, actual);
-
-
- vsf_color(vhandle,BLACK);
-
- /* Draw an ellipse */
- ii = BEZ_DRAW(vhandle, sizeof(vvar1)/(2 * sizeof(int)), vvar1,
- (char *) vfar1,
- brextent, &bnpoints, &bnmoves);
- pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
- brextent[0], brextent[1], brextent[2], brextent[3],
- ii, bnmoves);
-
- /* Draw a funny shape */
- ii = BEZ_DRAW(vhandle, sizeof(vvar2)/(2 * sizeof(int)), vvar2,
- (char *) vfar2,
- brextent, &bnpoints, &bnmoves);
- pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
- brextent[0], brextent[1], brextent[2], brextent[3],
- ii, bnmoves);
-
- /* Draw a rectangle */
- ii = BEZ_DRAW(vhandle, sizeof(vvar3)/(2 * sizeof(int)), vvar3,
- (char *) vfar3,
- brextent, &bnpoints, &bnmoves);
- pmsg("Boundig box|%3d %3d %3d %3d|pnts = %d|moves = %d",
- brextent[0], brextent[1], brextent[2], brextent[3],
- ii, bnmoves);
-
- (void) evnt_keybd();
- v_bez_off(vhandle);
- gem_exit(vhandle, 0);
- return 0; /* for a compiler to chew on */
- }
-
-
- void
- gem_exit(handle, code)
- int handle;
- int code;
- {
- v_clsvwk(handle);
- graf_mouse(M_ON, (int *)0);
- appl_exit();
- exit(code);
- }
-
- void
- pmsg (const char *format, ...)
- {
- va_list args;
- char albuf[80];
- char *pos = albuf;
-
- pos += sprintf(pos, "[3][");
- va_start(args, format);
- pos += vsprintf(pos, format, args);
- va_end(args);
- (void) sprintf(pos,"][ OK ]");
- form_alert(1,albuf);
- }
-